home *** CD-ROM | disk | FTP | other *** search
- machine mc68020
- fpu 1
-
- *******************************************************************************
- * name offset
- * n -4
- * ch -8
- * list -12
- * y2 -16
- * y1 -20
- * y0 -24
- * x2 -28
- * x1 -32
- * x0 -36
- * drx -40
- * rx -44
- * dlx -48
- * lx -52
- * y -56
- * args
- * dest 16
- * dc 12
- * c 8
- xdef _DrawTriangle
- _DrawTriangle
- link a5,#-56
- movem.l d2-d6,-(a7)
- lea (-24,a7),a7
- movea.l (12,a5),a0
- moveq #0,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(a7)
- movea.l (12,a5),a0
- moveq #0,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(4,a7)
- movea.l (12,a5),a0
- moveq #1,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(8,a7)
- movea.l (12,a5),a0
- moveq #1,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(12,a7)
- movea.l (12,a5),a0
- moveq #2,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(16,a7)
- movea.l (12,a5),a0
- moveq #2,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(20,a7)
- lea list0,a0
- move.l (a7)+,(a0)
- move.l (a7)+,(4,a0)
- move.l (a7)+,(8,a0)
- move.l (a7)+,(12,a0)
- move.l (a7)+,(16,a0)
- move.l (a7)+,(20,a0)
- move.l a0,(-12,a5)
- repeat0
- clr.l (-8,a5)
- clr.l (-4,a5)
- for1
- if2
- movea.l (-12,a5),a0
- move.l (-4,a5),d1
- lea (a0,d1.l*8),a0
- fmove.s (4,a0),fp0
- movea.l (-12,a5),a0
- move.l (-4,a5),d2
- addq.l #1,d2
- move.l d2,d1
- lea (a0,d1.l*8),a0
- fcmp.s (4,a0),fp0
- fble end2
- movea.l (-12,a5),a0
- move.l (-4,a5),d1
- addq.l #1,d1
- move.l d1,d0
- lea (a0,d0.l*8),a0
- movea.l (-12,a5),a1
- move.l (-4,a5),d0
- lea (a1,d0.l*8),a1
- move.l (a1),d0
- move.l (a0),(a1)
- move.l d0,(a0)
- movea.l (-12,a5),a0
- move.l (-4,a5),d1
- addq.l #1,d1
- move.l d1,d0
- lea (a0,d0.l*8),a0
- movea.l (-12,a5),a1
- move.l (-4,a5),d0
- lea (a1,d0.l*8),a1
- move.l (4,a1),d0
- move.l (4,a0),(4,a1)
- move.l d0,(4,a0)
- move.l #-1,(-8,a5)
- end2
- nextfor1
- addq.l #1,(-4,a5)
- cmpi.l #1,(-4,a5)
- ble for1
- end1
- move.l (-8,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- bne repeat0
- end0
- movea.l (-12,a5),a0
- moveq #0,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(-36,a5)
- movea.l (-12,a5),a0
- moveq #0,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(-24,a5)
- movea.l (-12,a5),a0
- moveq #1,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(-32,a5)
- movea.l (-12,a5),a0
- moveq #1,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(-20,a5)
- movea.l (-12,a5),a0
- moveq #2,d0
- lea (a0,d0.l*8),a0
- move.l (a0),(-28,a5)
- movea.l (-12,a5),a0
- moveq #2,d0
- lea (a0,d0.l*8),a0
- move.l (4,a0),(-16,a5)
- if4
- fmove.s (-24,a5),fp0
- fcmp.s (-20,a5),fp0
- fseq d1
- extb.l d1
- move.l d1,d0
- fmove.s (-36,a5),fp0
- fcmp.s (-32,a5),fp0
- fsgt d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end4
- move.l (-36,a5),d0
- move.l (-32,a5),(-36,a5)
- move.l d0,(-32,a5)
- end4
- if6
- fmove.s (-20,a5),fp0
- fcmp.s (-16,a5),fp0
- fseq d1
- extb.l d1
- move.l d1,d0
- fmove.s (-32,a5),fp0
- fcmp.s (-28,a5),fp0
- fsgt d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end6
- move.l (-32,a5),d0
- move.l (-28,a5),(-32,a5)
- move.l d0,(-28,a5)
- end6
- if8
- fmove.s (-24,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- move.l d1,d0
- fmove.s (-20,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- and.l d1,d0
- fmove.s (-16,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end8
- moveq #0,d0
- bra DrawTrianglefinish
- end8
- if10
- fmove.s (-36,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- move.l d1,d0
- fmove.s (-32,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- and.l d1,d0
- fmove.s (-28,a5),fp0
- ftst.d fp0
- fslt d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end10
- moveq #0,d0
- bra DrawTrianglefinish
- end10
- if12
- fmove.s (-24,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (4,a0),fp0
- fsge d1
- extb.l d1
- move.l d1,d0
- fmove.s (-20,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (4,a0),fp0
- fsge d1
- extb.l d1
- and.l d1,d0
- fmove.s (-16,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (4,a0),fp0
- fsge d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end12
- moveq #0,d0
- bra DrawTrianglefinish
- end12
- if14
- fmove.s (-36,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (a0),fp0
- fsge d1
- extb.l d1
- move.l d1,d0
- fmove.s (-32,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (a0),fp0
- fsge d1
- extb.l d1
- and.l d1,d0
- fmove.s (-28,a5),fp0
- movea.l (16,a5),a0
- fcmp.l (a0),fp0
- fsge d1
- extb.l d1
- and.l d1,d0
- tst.l d0
- beq end14
- moveq #0,d0
- bra DrawTrianglefinish
- end14
- if16
- fmove.s (-24,a5),fp0
- fcmp.s (-20,a5),fp0
- fbne elseif16_1
- move.l (-36,a5),(-52,a5)
- move.l (-32,a5),(-44,a5)
- fmove.s (-28,a5),fp1
- fsub.s (-52,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-48,a5)
- fmove.s (-28,a5),fp1
- fsub.s (-44,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-40,a5)
- fmove.s (-24,a5),fp0
- fmove.l fp0,(-56,a5)
- for18
- if19
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end19
- moveq #0,d0
- bra DrawTrianglefinish
- end19
- if21
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end21
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end21
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor18
- addq.l #1,(-56,a5)
- fmove.l (-56,a5),fp0
- fcmp.s (-16,a5),fp0
- fble for18
- end18
- bra end16
- elseif16_1
- fmove.s (-20,a5),fp0
- fcmp.s (-16,a5),fp0
- fbne elseif16_2
- move.l (-36,a5),(-44,a5)
- move.l (-44,a5),(-52,a5)
- fmove.s (-32,a5),fp1
- fsub.s (-52,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-48,a5)
- fmove.s (-28,a5),fp1
- fsub.s (-44,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-40,a5)
- fmove.s (-24,a5),fp0
- fmove.l fp0,(-56,a5)
- for25
- if26
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end26
- moveq #0,d0
- bra DrawTrianglefinish
- end26
- if28
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end28
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end28
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor25
- addq.l #1,(-56,a5)
- fmove.s (-20,a5),fp0
- fsub.w #1,fp0
- fmove.l (-56,a5),fp1
- fcmp.x fp0,fp1
- fble for25
- end25
- bra end16
- elseif16_2
- movem.l d0,-(a7)
- move.l (-24,a5),-(a7)
- move.l (-16,a5),-(a7)
- move.l (-20,a5),-(a7)
- move.l (-36,a5),-(a7)
- move.l (-28,a5),-(a7)
- jsr _GetXLine ; GetXLine
- lea (20,a7),a7
- movem.l (a7)+,d0
- fcmp.s (-32,a5),fp0
- fble elseif16_3
- move.l (-36,a5),(-44,a5)
- move.l (-44,a5),(-52,a5)
- fmove.s (-32,a5),fp1
- fsub.s (-52,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-20,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-48,a5)
- fmove.s (-28,a5),fp1
- fsub.s (-44,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-40,a5)
- fmove.s (-24,a5),fp0
- fmove.l fp0,(-56,a5)
- for32
- if33
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end33
- moveq #0,d0
- bra DrawTrianglefinish
- end33
- if35
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end35
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end35
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor32
- addq.l #1,(-56,a5)
- fmove.s (-20,a5),fp0
- fsub.w #1,fp0
- fmove.l (-56,a5),fp1
- fcmp.x fp0,fp1
- fble for32
- end32
- fmove.s (-28,a5),fp1
- fsub.s (-52,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-20,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-48,a5)
- fmove.s (-20,a5),fp0
- fmove.l fp0,(-56,a5)
- for37
- if38
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end38
- moveq #0,d0
- bra DrawTrianglefinish
- end38
- if40
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end40
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end40
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor37
- addq.l #1,(-56,a5)
- fmove.s (-16,a5),fp0
- fsub.w #1,fp0
- fmove.l (-56,a5),fp1
- fcmp.x fp0,fp1
- fble for37
- end37
- bra end16
- elseif16_3
- move.l (-36,a5),(-44,a5)
- move.l (-44,a5),(-52,a5)
- fmove.s (-28,a5),fp1
- fsub.s (-52,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-48,a5)
- fmove.s (-32,a5),fp1
- fsub.s (-44,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-20,a5),fp1
- fsub.s (-24,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-40,a5)
- fmove.s (-24,a5),fp0
- fmove.l fp0,(-56,a5)
- for44
- if45
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end45
- moveq #0,d0
- bra DrawTrianglefinish
- end45
- if47
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end47
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end47
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor44
- addq.l #1,(-56,a5)
- fmove.s (-20,a5),fp0
- fsub.w #1,fp0
- fmove.l (-56,a5),fp1
- fcmp.x fp0,fp1
- fble for44
- end44
- fmove.s (-28,a5),fp1
- fsub.s (-44,a5),fp1
- fmove.x fp1,fp0
- fmove.s (-16,a5),fp1
- fsub.s (-20,a5),fp1
- fdiv.x fp1,fp0
- fmove.s fp0,(-40,a5)
- fmove.s (-20,a5),fp0
- fmove.l fp0,(-56,a5)
- for49
- if50
- move.l (-56,a5),d0
- movea.l (16,a5),a0
- cmp.l (4,a0),d0
- blt end50
- moveq #0,d0
- bra DrawTrianglefinish
- end50
- if52
- move.l (-56,a5),d0
- moveq #0,d1
- cmp.l d1,d0
- blt end52
- movea.l (16,a5),a0
- fmove.s (-52,a5),fp0
- fmove.l fp0,d0
- fmove.s (-44,a5),fp0
- fmove.l fp0,d1
- move.l (-56,a5),d2
- move.l (8,a5),d3
- jsr _HLine ; HLine
- end52
- fmove.s (-52,a5),fp0
- fadd.s (-48,a5),fp0
- fmove.s fp0,(-52,a5)
- fmove.s (-44,a5),fp0
- fadd.s (-40,a5),fp0
- fmove.s fp0,(-44,a5)
- nextfor49
- addq.l #1,(-56,a5)
- fmove.s (-16,a5),fp0
- fsub.w #1,fp0
- fmove.l (-56,a5),fp1
- fcmp.x fp0,fp1
- fble for49
- end49
- end16
- DrawTriangleend
- moveq #0,d0
- DrawTrianglefinish
- movem.l (a7)+,d2-d6
- unlk a5
- rts
- *******************************************************************************
- * name offset
- * args
- * y1 24
- * y2 20
- * y3 16
- * x1 12
- * x2 8
- xdef _GetXLine
- _GetXLine
- link a5,#0
- fmovem.x fp2,-(a7)
- fmove.s (12,a5),fp2
- fsub.s (8,a5),fp2
- fmove.x fp2,fp1
- fmove.s (20,a5),fp2
- fsub.s (16,a5),fp2
- fmul.x fp2,fp1
- fmove.s (20,a5),fp2
- fsub.s (24,a5),fp2
- fdiv.x fp2,fp1
- fmove.x fp1,fp0
- fadd.s (8,a5),fp0
- GetXLineend
- GetXLinefinish
- fmovem.x (a7)+,fp2
- unlk a5
- rts
- xref _HLine
- section ".tocd",data
- list0 dc.s 0
- dc.s 0
- dc.s 0
- dc.s 0
- dc.s 0
- dc.s 0
- cnop 0,2
-